// 3. 具体集合
// 迭代器模式 - 具体聚合类
// 实现了IAggregate接口的具体集合类
// 使用泛型实现，可以存储任意类型的元素
public class MyList<T> : IAggregate<T>
{
  // 内部使用.NET框架的List<T>作为实际存储结构
  // 这个字段是私有的，确保外部只能通过迭代器访问元素
  private readonly List<T> _items = new();

  // 向集合中添加元素的方法
  public void Add(T item) => _items.Add(item);

  // 获取集合中元素数量的属性
  public int Count => _items.Count;

  // 实现IAggregate接口的工厂方法
  // 创建并返回一个正序迭代器
  public IIterator<T> CreateIterator()
      => new ListIterator<T>(this);

  // 扩展方法：创建逆序迭代器
  // 展示了迭代器模式可以支持多种遍历方式
  public IIterator<T> CreateReverseIterator()
      => new ReverseListIterator<T>(this);

  // 内部方法：根据索引获取元素
  // 标记为internal，只允许同程序集的迭代器类访问
  // 体现了迭代器模式的封装原则：客户端不直接访问集合内部结构
  internal T GetItem(int index) => _items[index];
}